package com.reportes;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRResultSetDataSource;

import com.Reporte;
import com.util.Util;

import exceptions.InvalidArgumentException;

public class Beneficiario extends Reporte {
	private static final String ACCION_ESPECIFICA_ID = "accionEspecificaId";
	private static final String ID_ESTADO = "estado";
	private static final String ID_MUNICIPIO = "municipio";
	private static final String ID_PARROQUIA = "parroquia";
	private String criterioSQL = " WHERE TRUE ";

	@Override
	public void VerificarParametros(HttpServletRequest request)
			throws InvalidArgumentException {
		Integer id = Util.toInteger(request.getParameter(ACCION_ESPECIFICA_ID));
		if (id != null){
			criterioSQL = " AND Accion_especifica.id =" + id;
			return;
		}
		id = Util.toInteger(request.getParameter(ID_ESTADO));
		if (id != null)
			criterioSQL = " AND estado.id= "+ id;
		id = Util.toInteger(request.getParameter(ID_MUNICIPIO));
		if (id != null)
			criterioSQL = " AND municipio.id= "+ id;
		id = Util.toInteger(request.getParameter(ID_PARROQUIA));
		if (id != null)
			criterioSQL = " AND parroquia.id= "+ id;
	}

	@Override
	public Object clone() throws CloneNotSupportedException {
		Beneficiario reporte = new Beneficiario();
		copyAttributesTo(reporte);
		return reporte;
	}

	@Override
	protected JRDataSource executeQuery(Connection connection)
			throws SQLException {
		StringBuffer sql =
			new StringBuffer("SELECT")
			.append(" Proyecto.nombre as pnombre,")
			.append(" Componente.descripcion AS conombre,")
			.append(" Accion_general.nombre as anombre,")
			.append(" Criterio_clasificacion.nombre as crnombre,")
			.append(" Accion_especifica.id AS acodigo,")
			.append(" Accion_especifica.contenido_criterio,")
			.append(" Accion_especifica.fecha_inicio,")
			.append(" Accion_especifica.fecha_fin,")
			.append(" Accion_especifica.bienes_entregados,")
			.append(" Estado.nombre as enombre,")
			.append(" Municipio.nombre as mnombre,")
			.append(" Parroquia.nombre as pnombre,")
			.append(" Caserio.nombre as canombre,")
			.append(" Persona.id,")
			.append(" Persona.cedula,")
			.append(" Persona.nombre,")
			.append(" Persona.apellido,")
			.append(" Persona.sexo,")
			.append(" Persona.fecha_nacimiento")
			.append(" FROM")
			.append(" Accion_especifica")
			.append(" INNER JOIN Caserio ON (Accion_especifica.caserio_id = Caserio.id)")
			.append(" INNER JOIN Accion_general ON (Accion_especifica.accion_general_id = accion_general.id)")
			.append(" INNER JOIN Criterio_clasificacion ON (Accion_general.criterio_clasificacion_id = Criterio_clasificacion.id)")
			.append(" INNER JOIN Proyecto ON (Accion_general.proyecto_id = Proyecto.id)")
			.append(" INNER JOIN Componente ON (Accion_especifica.componente_id = componente.id)")
			.append(" INNER JOIN Parroquia ON (Caserio.parroquia_id = Parroquia.id)")
			.append(" INNER JOIN Municipio ON (parroquia.municipio_id = Municipio.id)")
			.append(" INNER JOIN Estado ON (Estado.id = municipio.estado_id)")
			.append(" INNER JOIN")
			.append(" (SELECT")
			.append(" Persona.id,")
			.append(" Beneficiario.Accion_especifica_id")
			.append(" FROM")
			.append(" Beneficiario")
			.append(" INNER JOIN Persona ON (Beneficiario.persona_id = Persona.id)")
			.append(" UNION")
			.append(" SELECT")
			.append(" Persona.id,")
			.append(" beneficiarios_organizacion.Accion_especifica_id")
			.append(" FROM")
			.append(" beneficiarios_organizacion")
			.append(" INNER JOIN Persona ON (beneficiarios_organizacion.persona_id = Persona.id))")
			.append(" Beneficiario ON (Beneficiario.Accion_especifica_id = Accion_especifica.id)")
			.append(" INNER JOIN Persona on (Beneficiario.id = Persona.id)")
			.append(criterioSQL)
			.append(" ORDER BY ")
			.append(" Proyecto.nombre,Componente.descripcion,")
			.append(" Accion_especifica.id,Estado.nombre,")
			.append(" Municipio.nombre,Parroquia.nombre,")
			.append(" Caserio.nombre,Persona.cedula");
		Statement statement = connection.createStatement();
		ResultSet rs = statement.executeQuery(sql.toString());
		return new JRResultSetDataSource(rs);
	}
}
